var errorDescription = "Item alternative codes error";
function main() {	
	var dic = sc$Context.JsonDeserialize(sc$APIContext.GetImportBuffer());
	var scenario = sc$ApplImportScript.GetScenario();
	var collection;	
	var itemID;	
	var item;
    var codeVal;
    var nameVal; 	
	var FreeTextVall;
	var itemAlterCode;	
	var itemAlterMUs;
	var updateOperation;
	var warnings;
    
	//Στο σημείο αυτό έχει γίνει τροποποίηση του σεναρίου για να ελέγχεται και το FreeTextField01
	
	//itemID=dic["ItemID"];
	if (dic.ContainsKey( "ItemCode" )) {				
            codeVal = dic["ItemCode"];
    }
	if ((itemID == null) && (codeVal != null)) {
			var codeFields : Array = ["heCode"];
			var codeValues : Array = [codeVal];
			itemID = sc$ApplImportScript.FindItemsRecord(codeFields, codeValues, "heID");	                        
	}
	
	
	//return sc$Context.JsonSerialize(itemID);
	if (itemID == null) {
		sc$ApplImportScript.RaiseError(28, codeVal, nameVal);		
	}
	else {
		collection = sc$Context.DataObjects.GetMasterByID("Hercules", "Items", itemID);		
		item = collection.SearchByField("ID", itemID.ToString());
		//return sc$Context.JsonSerialize(dic["ItemAlterCode"].toString());					
		
		
		
		itemAlterCode = item.ItemAlterCodes.New();
		updateOperation = false;
		
	//if (dic.ContainsKey("AlterMUCode") || dic.ContainsKey("AlterMUName")) {			
	//		codeVal = null;
	//		nameVal = null;
	//		itemAlterMUs = null;
	//		var itemAlterMUID = null;
	//		
	//		if (dic.ContainsKey("AlterMUCode")) {
	//			codeVal = dic["AlterMUCode"];				
	//		}
	//		else if (dic.ContainsKey("AlterMUName")) {
	//			nameVal = dic["AlterMUName"];				
	//		}
	//		
	//		itemAlterMUID = sc$ApplImportScript.FindArrayCodeNameRecord("heMeasurementUnits", codeVal, nameVal, null);			
	//		if (itemAlterMUID != null) {
	//			itemAlterMUs = item.ItemAlterMUs.SearchByField("MsntID", itemAlterMUID.toString());
	//		}
	//		else {
	//			itemAlterMUID = sc$ApplImportScript.PostArrayCodeNameRecord("heMeasurementUnits", codeVal, nameVal, null, null, null);	
	//		}
	//		
	//		if (itemAlterMUs == null) {		
	//			itemAlterMUs = item.ItemAlterMUs.New();				
	//				
	//			itemAlterMUs.SetValue("MsntID", itemAlterMUID.toString());
	//			
	//			if (dic.ContainsKey("AlterMUAppliedTo")) {
	//				sc$ApplImportScript.UpdateInt16Value(itemAlterMUs, "AppliedMsnt", dic["AlterMUAppliedTo"]);
	//			}
	//			if (dic.ContainsKey("AlterMUCalculationType")) {
	//				sc$ApplImportScript.UpdateInt16Value(itemAlterMUs, "MsntCalcType", dic["AlterMUCalculationType"]);
	//			}
	//			if (dic.ContainsKey("AlterMUFactorOrRatio")) {
	//				sc$ApplImportScript.UpdateDecimalValue(itemAlterMUs, "FactorRatio", dic["AlterMUFactorOrRatio"]);
	//			}
	//			
	//			item.ItemAlterMUs.Add(itemAlterMUs);				
	//		}
	//		
	//		itemAlterCode.SetValue("MsntID", itemAlterMUID.toString());
	//	
	//		if (dic.ContainsKey( "SalesProposedQuantity" )) {
	//			sc$ApplImportScript.UpdateDecimalValue(itemAlterCode, "SalesPropQuan", dic["SalesProposedQuantity"]);
	//		}
	//		if (dic.ContainsKey( "PurchaseProposedQuantity" )) {
	//			sc$ApplImportScript.UpdateDecimalValue(itemAlterCode, "PurPropQuan", dic["PurchaseProposedQuantity"]);
	//		}
	//	}
		
		if (dic.ContainsKey( "ItemAlterCode" )) {
			itemAlterCode.SetValue("Code", dic["ItemAlterCode"]);
		}
	
		if (dic.ContainsKey( "AlterCodeTypeCode" ) || dic.ContainsKey( "AlterCodeTypeName" )){            
			codeVal = null;
			nameVal = null;
			if (dic.ContainsKey( "AlterCodeTypeCode" )) {
				codeVal = dic["AlterCodeTypeCode"];
			}
			if (dic.ContainsKey( "AlterCodeTypeName" )){					
				nameVal = dic["AlterCodeTypeName"];
			}
			ProcessLookupItem(codeVal, nameVal, "heAlterCodeTypes", "LctpID", itemAlterCode);			
		}	
		
		if (dic.ContainsKey( "AQuantity" )) {
			sc$ApplImportScript.UpdateDecimalValue(itemAlterCode, "AQuantity", dic["AQuantity"]);			
		}
		if (dic.ContainsKey( "BQuantity" )) {
			sc$ApplImportScript.UpdateDecimalValue(itemAlterCode, "BQuantity", dic["BQuantity"]);			
		}
	
		if (dic.ContainsKey( "1stInvAttrListCode" ) || dic.ContainsKey( "1stInvAttrListName" )) {
			codeVal = null;
			nameVal = null;			
			var invAttr1ListID = null;
			
			if (dic.ContainsKey( "1stInvAttrListCode" )) {				
				codeVal = dic["1stInvAttrListCode"];
			}
			if (dic.ContainsKey( "1stInvAttrListName" )) {
				nameVal = dic["1stInvAttrListName"];
			}

			if ((invAttr1ListID == null) && (codeVal != null)) {
				invAttr1ListID = sc$ApplImportScript.FindInvAttributeListID(
									itemID, 
									"HEINAT01ID",			
									item.Inat01ID,			
									codeVal,				
									null );
			}
			if ((invAttr1ListID == null) && (nameVal != null)) {
				invAttr1ListID = sc$ApplImportScript.FindInvAttributeListID(
									itemID, 
									"HEINAT01ID",			
									item.Inat01ID,			
									null,					
									nameVal );
			}
			if (invAttr1ListID != null) {
				itemAlterCode.SetValue("Iatl01ID", invAttr1ListID.ToString());
			}
		} 

		if (dic.ContainsKey( "2ndInvAttrListCode" ) || dic.ContainsKey( "2ndInvAttrListName" )) {
			codeVal = null;
			nameVal = null;			
			var invAttr2ListID = null;
			
			if (dic.ContainsKey( "2ndInvAttrListCode" )) {				
				codeVal = dic["2ndInvAttrListCode"];
			}
			if (dic.ContainsKey( "2ndInvAttrListName" )) {
				nameVal = dic["2ndInvAttrListName"];
			}

			if ((invAttr2ListID == null) && (codeVal != null)) {
				invAttr2ListID = sc$ApplImportScript.FindInvAttributeListID(
									itemID, 
									"HEINAT02ID",
									item.Inat02ID,
									codeVal,
									null );
			}
			if ((invAttr2ListID == null) && (nameVal != null)) {
				invAttr2ListID = sc$ApplImportScript.FindInvAttributeListID(
									itemID, 
									"HEINAT02ID",			
									item.Inat02ID,
									null,
									nameVal );
			}
			if (invAttr2ListID != null) {
				itemAlterCode.SetValue("Iatl02ID", invAttr2ListID.ToString());
			}
		} 

		if (dic.ContainsKey( "3rdInvAttrListCode" ) || dic.ContainsKey( "3rdInvAttrListName" )) {
			codeVal = null;
			nameVal = null;			
			var invAttr3ListID = null;
			
			if (dic.ContainsKey( "3rdInvAttrListCode" )) {				
				codeVal = dic["3rdInvAttrListCode"];
			}
			if (dic.ContainsKey( "3rdInvAttrListName" )) {
				nameVal = dic["3rdInvAttrListName"];
			}

			if ((invAttr3ListID == null) && (codeVal != null)) {
				invAttr3ListID = sc$ApplImportScript.FindInvAttributeListID(
									itemID, 
									"HEINAT03ID",
									item.Inat03ID,
									codeVal,
									null );
			}
			if ((invAttr3ListID == null) && (nameVal != null)) {
				invAttr3ListID = sc$ApplImportScript.FindInvAttributeListID(
									itemID, 
									"HEINAT03ID",
									item.Inat03ID,
									null,
									nameVal );
			}
			if (invAttr3ListID != null) {
				itemAlterCode.SetValue("Iatl03ID", invAttr3ListID.ToString());
			}
		}
		
		if (updateOperation == false) {
			item.ItemAlterCodes.Add(itemAlterCode);
		}
	}
	
	if (itemAlterMUs != null) {
		itemAlterMUs.EndEdit();
	}
	if (itemAlterCode != null) {	
		itemAlterCode.EndEdit();	
	}

	var logger = sc$ApplImportScript.SaveFromImport("Hercules", "Items", collection);
	warnings = sc$ApplImportScript.AppendLoggerWarnings(logger, warnings);	
	
	var outDic = new scDictionary();
	outDic["Cookie"]  = sc$APIContext.GetCookie();
	outDic["EntityId"] = itemAlterCode.ID;	
	outDic["Messages"] = logger;
	outDic["Warnings"] = warnings;
	
	return sc$Context.JsonSerialize(outDic);
}

function ProcessLookupItem(codeVal, nameVal, lookupTable, propName, entity, extraPropName, extraPropValue, lookupVersion){	
	var recID = sc$ApplImportScript.FindArrayCodeNameRecord(lookupTable, codeVal, nameVal, lookupVersion);
	if (recID == undefined){
		if (extraPropName != undefined && extraPropValue != undefined) {			
			var extraProps : Array = [extraPropName];
			var extraPropVals : Array = [extraPropValue];
			
			recID = sc$ApplImportScript.PostArrayCodeNameRecord(lookupTable, codeVal, nameVal, extraProps, extraPropVals, 
																errorDescription, lookupVersion);			
		}
		else {
			recID = sc$ApplImportScript.PostArrayCodeNameRecord(lookupTable, codeVal, nameVal, null, null, 
																errorDescription, lookupVersion);		
		}
		if (recID != undefined) {
			entity.SetValue(propName, recID); 
		}
	}	
	else {
		entity.SetValue(propName, recID); 
	}
}